//
//  Extension+UIImage.swift
//  微博Swift
//
//  Created by  justinchou on 16/2/23.
//  Copyright © 2016年  justinchou. All rights reserved.
//

import UIKit

extension UIImage {
    //创建一个点图片的方式
    class func justion_singleDotImage(color: UIColor) -> UIImage {
        
        UIGraphicsBeginImageContextWithOptions(CGSize(width: 1, height: 1), false, UIScreen.mainScreen().scale)
        
        color.setFill()
        
        UIRectFill(CGRectMake(0, 0, 1, 1))
        
        let result = UIGraphicsGetImageFromCurrentImageContext()
        
        UIGraphicsEndImageContext()
        
        return result
    }
    
    // MARK: - 异步绘制图像（如果布局时由UIImageView对图像进行拉伸，这些拉伸处理会影响tableview的显示性能）
    /// 异步绘制图像
    ///
    /// - parameter imageSize:    目标尺寸，默认 nil，使用当前图像大小
    /// - parameter cornerRadius: 圆角半径，默认 0，无圆角，如果传入 nil，使用 min(width, height) * 0.5 作为圆角半径
    /// - parameter backColor:    背景颜色，默认白色
    /// - parameter finished:     完成回调（图像）
    func justin_asyncDrawImage(
        imageSize: CGSize? = nil,
        cornerRadius: CGFloat? = 0,
        backColor: UIColor? = UIColor.whiteColor(),
        finished: (image: UIImage)->()){
            
            dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
                
                let imageSize = imageSize ?? self.size
                let cornerRadius = cornerRadius ?? (min(self.size.width, self.size.height) * 0.5)
                
                UIGraphicsBeginImageContextWithOptions(imageSize, backColor != nil, UIScreen.mainScreen().scale)
                
                let rect = CGRect(origin: CGPointZero, size: imageSize)
                
                //1. 设置填充颜色
                (backColor ?? UIColor.clearColor()).setFill()
                UIRectFill(rect)
                
                //2. 添加裁剪路径
                if cornerRadius > 0 {
                    let path = UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius)
                    path.addClip()
                }
                
                //3. 绘制图像
                self.drawInRect(rect)
                
                let result = UIGraphicsGetImageFromCurrentImageContext()
                
                UIGraphicsEndImageContext()
                
                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    //使用闭包，将绘制完的图片传递回去
                    finished(image: result)
                })
                
            }
            
    }
}
